flowchart TD
A[All packages] --> B{Code Coverage\n > 95%?}
B --> C{Documentation \n available?}
C --> D(Available for safety-critical activities)
Coline Zeballos Roche
Yann Féat mainanalytics
There are n packages for x, which one is the best?1
flowchart TD
A[All packages] --> B{Code Coverage\n > 95%?}
B --> C{Documentation \n available?}
C --> D(Available for safety-critical activities)
r-hub/reposCanonical fields in a package repository (DCF file)
Package: bslib
Version: 0.6.1
Depends: R (>= 2.10), R (>= 4.4), R (< 4.4.99)
License: MIT + file LICENSE
Built: R 4.4.0; ; 2023-11-29 16:39:06 UTC; unix
RVersion: 4.4
Platform: x86_64-pc-linux-gnu-ubuntu-22.04
Imports: base64enc, cachem, grDevices, htmltools (>= 0.5.7), jquerylib (>= 0.1.3),
jsonlite, lifecycle, memoise (>= 2.0.1), mime, rlang, sass (>= 0.4.0)
...Added fields for risk-based assessment
i <- 1
df_releases <- dplyr::tibble()
for (i in seq_along(gh_repos)) {
user_repo_i <- gh_repos[i]
url_old_i <- packages_old[i, "DownloadURL"]
name_old_i <- packages_old[i, "File"]
# fetch release assets from the Github API
j <- 1
ls_releases_i <- list()
repeat {
ls_releases_ij <- gh(sprintf("GET /repos/%s/releases", user_repo_i),
per_page = 100, page = j
)
if (length(ls_releases_ij) == 0) {
break
}
ls_releases_i <- c(ls_releases_i, ls_releases_ij)
if (length(ls_releases_ij) < 100) {
break
}
j <- j + 1
}
# add the list of release assets to a data frame
df_releases <- ls_releases_i %>%
lapply(function(ls_releases_ij) {
lapply(ls_releases_ij[["assets"]], function(asset) {
asset["uploader"] <- NULL
asset
}) %>%
dplyr::bind_rows()
}) %>%
dplyr::bind_rows() %>%
dplyr::mutate(
user_repo = user_repo_i,
url_old = url_old_i,
name_old = name_old_i
) %>%
rbind(df_releases)
}df_cmp_releases <- df_releases %>%
dplyr::select(
user_repo, name, created_at, browser_download_url, url_old,
name_old
) %>%
dplyr::rename(url = browser_download_url) %>%
dplyr::filter(stringr::str_detect(
.$name, stringr::coll("R4.4_x86_64-pc-linux-gnu-ubuntu-22.04")
)) %>%
dplyr::mutate(
created_at = lubridate::as_datetime(created_at, format = "%Y-%Om-%dT%H:%M:%SZ"),
libc = stringr::str_detect(url, "\\-libc")
) %>%
dplyr::arrange(user_repo, libc, dplyr::desc(created_at)) %>%
dplyr::group_by(user_repo) %>%
dplyr::slice_head(n = 1) %>%
dplyr::ungroup() %>%
dplyr::mutate(
pkg = stringr::str_split_i(user_repo, "/", 2),
ver = stringr::str_split_i(name, "_", 2),
ver_old = stringr::str_extract(url_old, "download/(.+)/", group = 1)
) %>%
dplyr::select(pkg, name, name_old, ver, ver_old, url)df_pkg_diff <- df_cmp_releases %>%
dplyr::filter(ver != ver_old)
if (nrow(df_pkg_diff)) {
# calculate risk metrics
opt_repos_init <- getOption("repos")
options(repos = c("CRAN" = "https://cran.rstudio.com"))
df_pkg_metrics <- df_pkg_diff$pkg %>%
riskmetric::pkg_ref(source = "pkg_cran_remote") %>%
riskmetric::pkg_assess() %>%
riskmetric::pkg_score() %>%
cbind(df_pkg_diff) %>%
dplyr::select(-c(pkg, ver, pkg_ref))
options(repos = opt_repos_init)
# replace PACKAGES file
# ...
}
Help guide the future direction of the R language
Collaborate on cross industry initiatives
Raise your leadership profile in the R Community
Protect your investment in R while supporting the common good
(NOTE: link to GH join us issue, add R Consortium info)